import numpy as np
# todo NumPy 三角函数
'''
三角函数是基本初等函数之一，是以角度（数学上最常用弧度制，下同）为自变量，角度对应任意角终边与单位圆交点坐标或其比值为因变量的函数。
三角函数一般用于计算三角形中未知长度的边和未知的角度，在导航、工程学以及物理学方面都有广泛的用途。
函数	描述
sin()	数组中角度的正弦值
cos()	数组中角度的余弦值
tan()	数组中角度的正切值
arcsin()	数组中角度的反正弦值
arccos()	数组中角度的反余弦值
arctan()	数组中角度的反正切值
degrees()	将弧度转换成角度
'''
# a = np.array([0, 30, 45, 60, 90])
# print(np.char.center('不同角度的正弦值', 30, '*'))
# # 通过乘 pi/180 转化为弧度
# sin = np.sin(a*np.pi/180)
# print(sin)
# print('\n')
#
# print(np.char.center('不同角度的余弦值', 30, '*'))
# # 通过乘 pi/180 转化为弧度
# cos = np.cos(a*np.pi/180)
# print(cos)
# print('\n')
#
# print(np.char.center('不同角度的正切值', 30, '*'))
# # 通过乘 pi/180 转化为弧度
# tan = np.tan(a*np.pi/180)
# print(tan)
# print('\n')
#
# print(np.char.center('不同角度的反正弦值', 30, '*'))
# arcsin = np.arcsin(sin)
# # 将弧度转换成角度打印输出
# print(np.degrees(arcsin))
# print('\n')
#
# print(np.char.center('不同角度的反余弦值', 30, '*'))
# arccos = np.arccos(cos)
# # 将弧度转换成角度打印输出
# print(np.degrees(arccos))
# print('\n')
#
# print(np.char.center('不同角度的反正切值', 30, '*'))
# arctan = np.arctan(tan)
# # 将弧度转换成角度打印输出
# print(np.degrees(arctan))
# print('\n')

# todo NumPy 四舍五入函数
'''
around()	四舍五入
round()	舍弃小数位
floor()	向下取整
ceil()	向上取整
'''
# numpy.around() 对数组中的数字进行四舍五入
# a = np.array([1, 2.0, 30.12, 129.567])
# 四舍五入（取整）
# print(np.around(a))
# # 四舍五入（取一位小数）
# print(np.around(a, decimals=1))
# # 四舍五入（取小数点左侧第一位） decimals 参数来表示舍入的小数位数，默认值为0。 如果为负，整数将四舍五入到小数点左侧的位置。
# print(np.around(a, decimals=-1))

# numpy.round() 对数组中的数字进行若干位的舍弃。
# a = np.array([1, 2.0, 30.12, 129.567])
# # 只舍不入（取整）
# print(np.around(a))
# # 只舍不入（到小数点后一位）
# print(np.around(a, decimals=1))
# # 只舍不入（取小数点左侧第一位）
# print(np.around(a, decimals=-1))

# numpy.floor() 返回小于或者等于指定表达式的最大整数，即向下取整。
# a = np.array([1, 2.0, 30.12, 129.567])
# # 向下取整
# print(np.floor(a))

# numpy.ceil() 返回大于或者等于指定表达式的最小整数，即向上取整。
# a = np.array([1, 2.0, 30.12, 129.567])
# # 向上取整
# print(np.ceil(a))

# todo NumPy 算术函数
'''
add()	两个数组元素相加
multiply()	两个数组元素相乘
divide()	两个数组元素相除
subtract()	两个数组元素相减
pow()	将第一个输入数组中的元素作为底数，计算它与第二个输入数组中相应元素的幂
mod()	计算输入数组中相应元素的相除后的余数
'''
# a = np.arange(6, dtype=np.float_).reshape(2, 3)
# print('第一个数组：')
# print(a)
# print('第二个数组：')
# b = np.array([10, 10, 10])
# print(b)
# print('\n')
#
# print(np.char.center('两个数组相加', 20, '*'))
# print(np.add(a, b))
# print('\n')
#
# print(np.char.center('两个数组相减', 20, '*'))
# print(np.subtract(a, b))
# print('\n')
#
# print(np.char.center('两个数组相乘', 20, '*'))
# print('两个数组相乘：')
# print(np.multiply(a, b))
# print('\n')
#
# print(np.char.center('两个数组相除', 20, '*'))
# print(np.divide(a, b))
# print('\n')

# numpy.pow 将第一个输入数组中的元素作为底数，计算它与第二个输入数组中相应元素的幂。
# c = np.array([10, 100, 1000])
# print('第一个数组是：')
# print(c)
# print('\n')
#
# print(np.char.center('调用 power 函数', 20, '*'))
# print(np.power(c, 2))
# print('\n')
#
# d = np.array([1, 2, 3])
# print('第二个数组是：')
# print(d)
# print('\n')
#
# print(np.char.center('再次调用 power 函数', 20, '*'))
# print(np.power(c, d))

# numpy.mod() 计算输入数组中相应元素的相除后的余数。 要注意数组必须具有相同的形状或符合数组广播规则。
e = np.array([10, 20, 30])
f = np.array([3, 5, 7])
print('第一个数组：')
print(e)
print('\n')

print('第二个数组：')
print(f)
print('\n')

print(np.char.center('调用 mod 函数', 20, '*'))
print(np.mod(e, f))

# 更多数学函数 https://numpy.org/devdocs/reference/routines.math.html